package com.situ.dao;

import java.util.List;
import java.util.Map;

import com.situ.common.Assist;
import com.situ.entity.IvOutinvoice;
import org.apache.ibatis.annotations.*;

/**
 * IvOutinvoice的Dao接口
 *
 * @author
 */
@Mapper
public interface IvOutinvoiceDao {

    /**
     * 获得IvOutinvoice数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
     *
     * @param assist
     * @return
     */
    long getIvOutinvoiceRowCount(Assist assist);

    /**
     * 获得IvOutinvoice数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
     *
     * @param assist
     * @return
     */
    List<IvOutinvoice> selectIvOutinvoice(Assist assist);

    /**
     * 通过IvOutinvoice的id获得IvOutinvoice对象
     *
     * @param id
     * @return
     */
    IvOutinvoice selectIvOutinvoiceById(Object id);

    /**
     * 获得一个IvOutinvoice对象,以参数IvOutinvoice对象中不为空的属性作为条件进行查询,返回符合条件的第一条
     *
     * @param obj
     * @return
     */
    IvOutinvoice selectIvOutinvoiceObjSingle(IvOutinvoice obj);

    /**
     * 获得一个IvOutinvoice对象,以参数IvOutinvoice对象中不为空的属性作为条件进行查询
     *
     * @param obj
     * @return
     */
    List<IvOutinvoice> selectIvOutinvoiceByObj(IvOutinvoice obj);

    /**
     * 插入IvOutinvoice到数据库,包括null值
     *
     * @param value
     * @return
     */
    int insertIvOutinvoice(IvOutinvoice value);

    /**
     * 插入IvOutinvoice中属性值不为null的数据到数据库
     *
     * @param value
     * @return
     */
    int insertNotNullIvOutinvoice(IvOutinvoice value);

    /**
     * 批量插入IvOutinvoice到数据库,包括null值
     *
     * @param value
     * @return
     */
    int insertIvOutinvoiceByBatch(List<IvOutinvoice> value);

    /**
     * 通过IvOutinvoice的id删除IvOutinvoice
     *
     * @param id
     * @return
     */
    int deleteIvOutinvoiceById(Object id);

    /**
     * 通过辅助工具Assist的条件删除IvOutinvoice
     *
     * @param assist
     * @return
     */
    int deleteIvOutinvoiceByAssist(Assist assist);

    /**
     * 通过IvOutinvoice的id更新IvOutinvoice中的数据,包括null值
     *
     * @param enti
     * @return
     */
    int updateIvOutinvoiceById(IvOutinvoice enti);

    /**
     * 通过IvOutinvoice的id更新IvOutinvoice中属性不为null的数据
     *
     * @param enti
     * @return
     */
    int updateNotNullIvOutinvoiceById(IvOutinvoice enti);

    /**
     * 通过辅助工具Assist的条件更新IvOutinvoice中的数据,包括null值
     *
     * @param value
     * @param assist
     * @return
     */
    int updateIvOutinvoice(@Param("enti") IvOutinvoice value, @Param("assist") Assist assist);

    /**
     * 通过辅助工具Assist的条件更新IvOutinvoice中属性不为null的数据
     *
     * @param value
     * @param assist
     * @return
     */
    int updateNotNullIvOutinvoice(@Param("enti") IvOutinvoice value, @Param("assist") Assist assist);

    @Select("select B.ID,B.StartNo,B.EndNo,D.Counts,A.Used,A.Invalid,B.Counts s,A.Archived,B.OutDate,C.EmpNmae,B.EmpID\n" +
            "from IV_Invoice A join IV_InInvoice D on A.InID=D.ID\n" +
            "\t\t\tjoin IV_OutInvoice B on A.OutID=B.ID\n" +
            "\t\t\tjoin SY_Emp C on D.InEmpID=C.id")
    List<Map> find();
}